A platform is a combination of hardware architecture and/or software platform that enables software to run on user devices, such as desktop computers, mobile phones, and tablets. Software platforms are typically a combination of software libraries and other executables that present well-defined Application Programming Interfaces (“API”). Software developers are increasingly utilizing modern software platforms to enable the creation of platform-independent applications. Modern software platforms typically include a programming language, the compiled output of which executes within the context of machine-dependent programs, known as virtual machines (“VM”).
A VM is a software program or library that permits an isolated processing environment to exist on a computer system. VMs hide or abstract the details of the underlying computer system from the software that executes within each VM. To create platform-independent applications, software developers use platform tools to compile the programming language source code into the software executable that runs on the VMs, also known as bytecode.
Bytecode is typically a set of binary files that include platform-neutral instructions for implementing application behavior. The VMs interpret the bytecodes, and execute corresponding native instructions on the target computer system associated with the bytecodes. Examples of software platforms that enable the creation of computer system-independent applications include the Java and .Net platforms.
Java is a registered trademark of Oracle Corporation. Oracle associates the Java trademark with its eponymous computer programming language, Java Virtual Machine (“JVM,”) and related infrastructure and tools. .Net is a registered trademark of Microsoft Corporation. For .Net, Microsoft provides its C# programming language, .Net runtime virtual machine, and related infrastructure and tools.
The Java programming language and runtime package support the tenets of object-oriented programming, which includes the principles of inheritance, polymorphism, and data hiding. Java organizes programming objects into conceptual classes, and saves the compiled bytecode for its classes into data files, also known as class files. With respect to inheritance, Java objects (or classes of objects) inherit properties and behaviors in a parent/child relationship, also referred to as superclass/subclass, respectively.
Java creates an instance of a particular class object via a process called instantiation. The phrase “instantiating a class” means the same thing as “creating an object.” An object is an instance of a class. The instantiation process involves allocating memory for the new instance to exist. Java accomplishes this by invoking a special method defined by each class, called a constructor. A class object includes one or more constructors. The body of the constructor also provides the ability to initialize the data members of the class. For these reasons, constructors are also referred to as object initializers, and the software code within the body of the constructors as object initialization code.
A superclass is a class that has been extended by another class. This allows the extending class, also known as the subclass, to inherit the state and behaviors of the superclass. Subclasses form chains with one or more superclasses to create inheritance hierarchies, or inheritance chains.
In an inheritance hierarchy, a superclass may itself inherit information from another superclass. When analyzing classes in an inheritance hierarchy, it is important to traverse the entire chain of classes in the hierarchy to preserve the data and relationships between the classes. These are also referred to as class hierarchies.
The classes towards the top of an inheritance hierarchy tend to be abstract classes that typically do not have any objects instantiated from them. The bottom-most classes of the hierarchy are typically the concrete classes, or declaring classes, from which applications create objects that accomplish the useful work of an application.
Redefinition of classes is a well-known practice. In Java, the HotSpot VM has provided the ability to redefine classes at runtime since JDK 1.4. This functionality is based on the work of Mikhail Dmitriev, from “Safe Class and Data Evolution in Large and Long-Lived Java Applications,” PhD thesis, University of Glasgow, 2001. This functionality is better known as HotSwap. In addition, a publication by Allan Raundahl Gregersen, “Extending NetBeans with Dynamic Update of Active Modules,” PhD thesis, University of Southern Denmark, 2010, discusses dynamic update of code modules using the NetBeans development platform. NetBeans is a registered trademark of Oracle, Inc.